package com.leetcode;

import com.leetcode.common.TreeNode;

import java.util.ArrayList;
import java.util.List;

/**
 * 257. 二叉树的所有路径
 * 由底到顶的递归的另一种写法
 *
 * @author fy
 * @date 2022-04-23 19:55
 */
public class Solution257_1 {

    private boolean isLeafNode(TreeNode node) {
        if (node == null) {
            return false;
        }
        return node.left == null && node.right == null;
    }

    /**
     * 二叉树的所有路径
     *
     * @param root
     * @return
     */
    public List<String> binaryTreePaths(TreeNode root) {
        List<String> list = new ArrayList<>();
        if (root == null) {
            return list;
        }
        // 叶子节点的话只需要加入数字
        if (isLeafNode(root)) {
            list.add(String.valueOf(root.val));
            return list;
        }
        // 判空的话可以减少回调次数
        if (root.left != null) {
            List<String> left = binaryTreePaths(root.left);
            list.addAll(left);
        }
        if (root.right != null) {
            List<String> right = binaryTreePaths(root.right);
            list.addAll(right);
        }
        // 这样的话增加一些无谓的代码调用
        List<String> resList = new ArrayList<>();
        for (String str : list) {
            resList.add(root.val + "->" + str);
        }
        return resList;
    }

}
